/**
 * Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package cn.knet.sp.ncrm.modules.customer.visitrecord.service;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import cn.knet.sp.ncrm.common.persistence.Page;
import cn.knet.sp.ncrm.common.service.CrudService;
import cn.knet.sp.ncrm.modules.customer.analyse.vo.AnalyseVo;
import cn.knet.sp.ncrm.modules.customer.potentialcustomer.entity.PotentialCustomer;
import cn.knet.sp.ncrm.modules.customer.potentialcustomer.service.PotentialCustomerService;
import cn.knet.sp.ncrm.modules.customer.visitrecord.dao.VisitRecordDao;
import cn.knet.sp.ncrm.modules.customer.visitrecord.entity.VisitRecord;
import cn.knet.sp.ncrm.modules.customer.visitrecord.vo.VisitRecordVo;
import cn.knet.sp.ncrm.modules.sys.customerstatus.entity.CustomerStatus;
import cn.knet.sp.ncrm.modules.sys.customerstatus.service.CustomerStatusService;
import cn.knet.sp.ncrm.modules.sys.utils.CustomerUtils;
import cn.knet.sp.ncrm.modules.sys.utils.UserUtils;

/**
 * 销售跟踪Service
 *
 * @author 冯亚鹏
 * @version 2015-08-28
 */
@Service
@Transactional(readOnly = true)
public class VisitRecordService extends CrudService<VisitRecordDao, VisitRecord> {

	@Resource
	private PotentialCustomerService potentialCustomerService;

	public VisitRecord get(String id) {
		return super.get(id);
	}

	/**
	 * 通过潜在客户id 查询 客户销售跟踪记录
	 */
	public List<VisitRecord> findList(String potentialCustomerId) {
		VisitRecord visitRecord = new VisitRecord();
		visitRecord.setPotentialCustomerId(potentialCustomerId);
		return super.findList(visitRecord);
	}

	public List<VisitRecord> findList(VisitRecord visitRecord) {
		return super.findList(visitRecord);
	}


	public List<VisitRecordVo> findVoList(VisitRecord visitRecord) {
		if (StringUtils.isBlank(visitRecord.getPage().getOrderBy())) {
			visitRecord.getPage().setOrderBy("a.last_updated desc");
		}
		return this.dao.findVoList(visitRecord);
	}

	public Page<VisitRecord> findPage(Page<VisitRecord> page, VisitRecord visitRecord) {
		return super.findPage(page, visitRecord);
	}

	public Page<AnalyseVo> findPageAnalyseVo(Page page, AnalyseVo analyseVo) {
		analyseVo.setPage(page);
		page.setList(dao.findAnalyseVoList(analyseVo));
		return page;
	}

	@Transactional(readOnly = false)
	public void save(VisitRecord visitRecord) {
		super.save(visitRecord);
	}

	@Transactional(readOnly = false)
	public void delete(VisitRecord visitRecord) {
		super.delete(visitRecord);
	}


	/**
	 * 记录销售跟踪记录,并处理客户的相关信息
	 *
	 * @param potentialCustomer the potential customer
	 * @param visitRecord       the visit record
	 * @author fengyapeng
	 * @since 2015 /09/07 17:07:52
	 */
	@Transactional(readOnly = false)
	public void createVisitRecord(PotentialCustomer potentialCustomer, VisitRecord visitRecord) {
		visitRecord.setId(null);
		visitRecord.setPotentialCustomerId(potentialCustomer.getId());
		if (visitRecord.getCustomerStatusId() != null) {// 需要记录客户状态不为空，
			CustomerStatus customerStatus = CustomerUtils.getStatus(visitRecord.getCustomerStatusId());
			if(StringUtils.equals("无效数据",customerStatus.getContent())){
				potentialCustomer.setWeight(0);
			}
			if (potentialCustomer.getCustomerStatusId() != null) {//上次的客户状态不为空,更新or 创建 lastCustomerStatusId
				potentialCustomer.setLastCustomerStatusId(potentialCustomer.getCustomerStatusId());
				visitRecord.setLastCustomerStatusId(potentialCustomer.getCustomerStatusId());
				potentialCustomer.setLastCustomerStatusDetailId(potentialCustomer.getCustomerStatusDetailId());
				visitRecord.setLastCustomerStatusDetailId(potentialCustomer.getCustomerStatusDetailId());
			}
		}
		potentialCustomer.setVisitRecord(visitRecord.getVisitRecord());
		potentialCustomer.setCustomerStatusId(visitRecord.getCustomerStatusId());// 记录本次的跟踪客户状态
		potentialCustomer.setCustomerStatusDetailId(visitRecord.getCustomerStatusDetailId());// 记录本次的跟踪客户状态明细
		potentialCustomer.setDateVisit(new Date());
		potentialCustomer.setVisitNum(potentialCustomer.getVisitNum() != null ?
									  potentialCustomer.getVisitNum() + 1 : 1);// 回访记录
		potentialCustomer.setLastVisitId(UserUtils.getUser().getId());// 最后跟踪人员
		visitRecord.setCreateUserId(UserUtils.getUser().getId());
		visitRecord.setVisitNum(potentialCustomer.getVisitNum());
		this.save(visitRecord);

	}


	public List<AnalyseVo> findChart(AnalyseVo analyseVo) {
		return dao.findChart(analyseVo);
	}
}